#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int len=500001;
int reg[len];
int di;
int father[len],rank[len];
struct trie
{
    int id;
    trie *next[26];
    trie()
    {
        id=-1;
        memset(next,0,sizeof(next));
    }
}root;
int getId(char ss[])
{
    trie *p=&root;
    for(int i=0;ss[i];i++)
    {
        p=p->next[ss[i]-'a'];
        if(p==NULL)return -1;
    }
    return p->id;
}
int insert(char ss[])
{
    trie *p=&root;
    for(int i=0;ss[i];i++)
    {
        if(p->next[ss[i]-'a']==NULL)
        {
            p->next[ss[i]-'a']=new trie();
            p=p->next[ss[i]-'a'];
        }
        else p=p->next[ss[i]-'a'];
    }
    p->id=di;
    father[di]=di++;
    return di-1;

}
int getRoot(int id)
{
    if(father[id]!=id)father[id]=getRoot(father[id]);
    return father[id];
}
void init()
{
    fill(reg,reg+len,0);
    fill(rank,rank+len,0);
    di=1;
}
int main()
{
    char st[15],ed[15];
    int id1,id2,r1,r2;
    init();
    while(~scanf("%s%s",st,ed))
    {
        if((id1=getId(st))==-1)id1=insert(st);
        reg[id1]++;
        if((id2=getId(ed))==-1)id2=insert(ed);
        reg[id2]++;
        if((r1=getRoot(id1))!=(r2=getRoot(id2)))
        {
            if(rank[r1]<rank[r2]) father[r1]=r2;
            else if(rank[r1]>rank[r2]) father[r2]=r1;
            else
            {
                father[r2]=r1;
                rank[r1]++;
            }
        }
    }
    int rt;
    if(di!=1)rt=getRoot(1);
    else
    {
        cout<<"Possible"<<endl;
        return 0;
    }
    for(int i=1,odd=0;i<di;i++)
    {
        if(reg[i]&1)odd++;
        if(odd>2||getRoot(i)!=rt)
        {
            cout<<"Impossible"<<endl;
            return 0;
        }
    }
    cout<<"Possible"<<endl;
    return 0;
}

